package com.waitingresult.thread.visibility;

/**
 * All right reserved,Designed By WangShuai
 *
 * @author : WangShuai
 * @version : V1.0
 * @ClassName : VisibilityDemo
 * @Description : 多线程可见性Demo
 * @date : 2022/9/20 10:54
 */
public class VisibilityDemo {
    static volatile boolean flag = true;

    public static void main(String[] args) throws Exception {
        /*
            1. 设置一个 线程运行的标识， 默认为true
            2. 启动一个子线程，通过标识 来终止运行
            3. 主线程 睡眠1秒，设置 标识为false，此时理想状态应该是 主线程设置完了flag 子线程停止执行
            4. 问题：
                flag 标识在主线程中被修改 对子线程是不可见的。所以导致子线程并不会终止运行，此时需要通过 volatile关键字 来保证多线程之间的数据可见性
         */
       new Thread(()->{
           while (flag){

           }
       }).start();
       Thread.sleep(1000);
       flag = false;
    }
}
